Make constructors protected and define 'friend' or 'static' fns that return a ptr to objects created via 'new' (the ctors must be protected rather than private, otherwise you couldn't derive from the class). Ex:
class X { //only want to allow dynamicly allocated X's